Historia de la programación

Contenido

Mucho antes que un ordenador…

Desde el comienzo, la humanidad ha intentado almacenar datos y hacer cuentas con ellos de la manera más rápida y sencilla posible. En Babilonia y Egipto usaban tablillas o papiros para apuntar los datos y hacer cuentas; tenían sus propias tablas de multiplicar y algoritmos manuales para hacer cálculos.

Entre el 1000 y el 500 a. C. se desarrolla el ábaco —no está claro si fueron primero los babilonios o los chinos— para facilitar las cuentas. Aunque no es una calculadora al uso, ya es un aparato que sirve para contar.

El término «algoritmo» —del que hablaremos el próximo día— viene de Muhammad ibn Musa Al’Khowarizmi (ca. 825). Él desarrolló varios métodos para resolver problemas matemáticos: partiendo de unos datos, había que seguir una serie de pasos para llegar a la solución.

A partir del siglo XVI y XVII, se empiezan a idear «máquinas» que hagan cálculos de manera automática. Una de las primeras la diseñó Leonardo DaVinci; aunque la primera «calculadora mecánica» como tal, bien diseñada, no llega hasta 1623. A partir de ahí, tanto Blaise Pascal (1642) como Gottfried von Leibniz diseñan y construyen máquinas capacidad de hacer cálculos reales. El primero solo para sumas (la hizo con 21 años) y el segundo, mejorando su diseño, le añade restas, multiplicaciones, divisiones y raíces cuadradas.

Máquinas «programables»

Todo cambia hacia 1832, con Charles Babbage y Ada Lovelace (hija de Lord Byron). Charles diseñó y construyó una máquina en la que, por fin, las instrucciones —los cálculos que hace— estaban almacenados y podían ser modificados. Aunque Babbage solo pensó en la máquina como una «calculadora», Lovelace fue la primera en reconocer que su potencial iba mucho más allá. Entendió que con la máquina se podían realizar cálculos mucho más complejos, y que podía manipular símbolos y no solo números, lo que abría la puerta a un sinfín de aplicaciones. De hecho, Lovelace vislumbró que la máquina podría llegar a crear arte y música si se le proporcionaban las instrucciones adecuadas en un formato simbólico. Además, en sus escritos, introdujo conceptos fundamentales de programación como los bucles (la repetición de una serie de instrucciones) y las subrutinas —que nosotros conocemos como «funciones» (un conjunto de instrucciones que pueden ser llamadas en cualquier momento)—.

A ellos le seguirá George Boole (1854) con el álgebra booleana (fundamental en los sistemas modernos, compuestos de 0s y 1s) y Herman Hollerit (1890), que desarrolló una máquina para procesar los datos del censo de población de los EE. UU., programada con tarjetas de cartón perforadas. La empresa que fundó, «Tabulating Machine Company», la CTR, pasó en 1924 a denominarse IBM.

El genio que definió los límites: Alan Turing

Entre todas estas máquinas calculadoras, hubo un joven matemático británico que cambió para siempre nuestra comprensión de lo que significa «computar»: Alan Turing (1954).

En 1937, con 25 años, Turing publicó un trabajo que respondía a la siguiente cuestión: ¿qué problemas pueden resolverse siguiendo un procedimiento mecánico? Para responderla, imaginó una máquina muy simple —que hoy llamamos «Máquina de Turing»— capaz de leer símbolos, escribirlos y moverse por una cinta infinita. Sorprendentemente, demostró que esta máquina tan sencilla podía resolver cualquier problema que tuviera una solución algorítmica.

Durante la Segunda Guerra Mundial, Turing puso su genio al servicio del gobierno, para descifrar los códigos de la máquina Enigma utilizada por los nazis.

Tras la guerra, Turing trabajó en el diseño de ordenadores reales y en 1950 propuso lo que hoy conocemos como el «Test de Turing»: una prueba para determinar si una máquina puede exhibir comportamiento inteligente. Sus ideas sobre inteligencia artificial se adelantaron décadas a su tiempo.

El siglo XX: de la guerra a la revolución personal

El siglo XX trajo consigo dos guerras mundiales que aceleraron el desarrollo de la computación. La necesidad militar de descifrar códigos, calcular trayectorias de proyectiles y procesar enormes cantidades de información empujó a científicos e ingenieros a crear las primeras máquinas electrónicas.

En 1943, en el más absoluto secreto, Tommy Flowers construye Colossus Mark I para el centro de desciframiento británico de Bletchley Park —el mismo lugar donde trabajaba Turing—. Esta máquina, con sus miles de tubos de vacío, era capaz de descifrar los códigos alemanes a una velocidad impensable para la época.

Tres años después, en 1946, John Mauchly y Presper Eckert presentan al mundo ENIAC (Electronic Numerical Integrator and Computer). Con sus 18.000 tubos de vacío, 30 toneladas de peso y 135 metros cuadrados, era un monstruo que consumía tanta electricidad como una pequeña ciudad. Pero por primera vez, una máquina podía hacer en minutos cálculos que a un humano le llevarían años.

Como anécdota, fue Grace Hopper, trabajando con la MARK-1 en 1945, quien acuñó el término «debugging» (quitar errores) cuando encontró literalmente un insecto atrapado en los relés de la máquina (de-bug, quitar un bicho).

Los lenguajes nacen

Mientras las máquinas evolucionaban, los programadores se daban cuenta de que escribir directamente en código máquina era una pesadilla. Maurice Wilkes en Cambridge fue uno de los primeros en sistematizar la programación, estableciendo el concepto de subrutinas (funciones) y escribiendo el primer libro sobre el tema.

Pero la verdadera revolución llegó en 1957 con John Backus e IBM, que presentaron FORTRAN —el primer lenguaje de alto nivel exitoso—. Backus —como hacemos todos los programadores— prometió que el proyecto le llevaría 6 meses, pero acabó tardando 3 años, cambiando para siempre la forma de programar.

Le siguieron otros lenguajes que marcaron época: COBOL (1960) para empresas, BASIC (1964) pensado específicamente para estudiantes, y C (1972), creado por Dennis Ritchie y Brian Kernighan, que se convertiría en uno de los lenguajes más influyentes de la historia.

De laboratorios a hogares

El salto definitivo se produce en 1975 con el MITS Altair 8080, el primer ordenador personal que no requería conocimientos de ingeniería para usarse. Costaba 375 dólares y tenía apenas 256 bytes de memoria, pero representaba algo revolucionario: la computación al alcance de cualquiera.

Dos jóvenes programadores, Paul Allen y Bill Gates, escribieron un intérprete BASIC para el Altair y fundaron una pequeña empresa llamada Microsoft. Al año siguiente, en un garaje de California, Steve Jobs y Steve Wozniak creaban el Apple II y nacía Apple.

En 1981, IBM lanza su PC (Personal Computer), legitimando definitivamente el concepto de ordenador personal. Lo que había comenzado como máquinas de guerra se había convertido en herramientas para el hogar, la oficina y la escuela.

La computación había pasado de ocupar edificios enteros a caber en una mesa, y de costar fortunas a estar al alcance de estudiantes y familias. El sueño de Leibniz —liberar a los humanos de los cálculos tediosos— finalmente se había hecho realidad.